package com.example.design.c.state.demo1;

import lombok.Getter;
import lombok.Setter;

/**
 * 全局上下文
 */
@Setter
@Getter
public class Context {

    /**
     * 单例模式私有成员变量
     */
    private volatile static Context context = new Context(StateEnum.A);

    /**
     * 状态成员变量
     */
    private State state;

    /**
     * 声明带参数的构造方法
     *
     * @param state 初始状态
     */
    private Context(State state) {
        this.state = state;
    }

    /**
     * 公共的实例方法
     *
     * @return
     */
    public synchronized static Context getInstance() {
        return context;
    }

    /**
     * 对请求做出处理
     */
    public void handle() {
        state.handle(this);
    }
}
